// CTP 配置管理
export interface CtpServerConfig {
  name: string;
  brokerId: string;
  tradeFront: string;
  marketFront: string;
  authCode?: string;
  userProductInfo?: string;
  appId?: string;
}

// 账号配置接口
export interface AccountConfig {
  accountName: string;        // 账户名（用作key）
  tradeFront: string;         // 交易服务器前置
  marketFront: string;        // 行情服务前置
  brokerName: string;         // 期货公司名称
  brokerId: string;           // 期货公司代码
  createTime: string;         // 创建时间
  updateTime: string;         // 更新时间
}

// 预定义的服务器配置
export const CTP_SERVERS: Record<string, CtpServerConfig> = {
  // 7x24小时环境
  simnow24: {
    name: 'SimNow 7x24小时',
    brokerId: '9999',
    tradeFront: 'tcp://182.254.243.31:40001',
    marketFront: 'tcp://182.254.243.31:40011',
    authCode: '0000000000000000',
    userProductInfo: 'TauriApp',
    appId: 'simnow_client_test'
  },

  // 您当前使用的配置
  current: {
    name: '第一组配置',
    brokerId: '9999',
    tradeFront: 'tcp://182.254.243.31:30001',
    marketFront: 'tcp://182.254.243.31:30011',
    authCode: '0000000000000000',
    userProductInfo: 'TauriApp',
    appId: 'simnow_client_test'
  },

  // 自定义配置
  custom: {
    name: '第二组配置',
    brokerId: '9999',
    tradeFront: 'tcp://182.254.243.31:30002',
    marketFront: 'tcp://182.254.243.31:30012',
    authCode: '0000000000000000',
    userProductInfo: 'TauriApp',
    appId: 'simnow_client_test'
  },
  third: {
    name: '第三组配置',
    brokerId: '9999',
    tradeFront: 'tcp://182.254.243.31:30003',
    marketFront: 'tcp://182.254.243.31:30013',
    authCode: '0000000000000000',
    userProductInfo: 'TauriApp',
    appId: 'simnow_client_test'
  }
};

// 配置管理类
export class CtpConfigManager {
  private static readonly CONFIG_KEY = 'ctp_server_config';
  private static readonly SELECTED_SERVER_KEY = 'selected_ctp_server';

  // 获取当前选中的服务器配置
  static async getCurrentServerConfig(): Promise<CtpServerConfig> {
    const selectedServer = this.getSelectedServer();

    // 首先检查预定义服务器
    const predefinedConfig = CTP_SERVERS[selectedServer];
    if (predefinedConfig) {
      // 如果是自定义配置，从本地存储获取
      if (selectedServer === 'custom') {
        const customConfig = this.getCustomConfig();
        return customConfig || CTP_SERVERS.custom;
      }
      return predefinedConfig;
    }

    // 如果不是预定义服务器，尝试从账号配置中获取
    try {
      const { AccountConfigManager } = await import('./accountConfig');
      const accountConfig = await AccountConfigManager.getAccount(selectedServer);
      if (accountConfig) {
        return AccountConfigManager.accountToCtpConfig(accountConfig);
      }
    } catch (error) {
    }

    return CTP_SERVERS.current;
  }

  // 获取选中的服务器标识
  static getSelectedServer(): string {
    try {
      return localStorage.getItem(this.SELECTED_SERVER_KEY) || 'current';
    } catch (error) {
      return 'current';
    }
  }

  // 设置选中的服务器
  static setSelectedServer(serverKey: string): void {
    try {
      if (!CTP_SERVERS[serverKey]) {
        throw new Error(`无效的服务器配置: ${serverKey}`);
      }
      localStorage.setItem(this.SELECTED_SERVER_KEY, serverKey);
    } catch (error) {
    }
  }

  // 获取自定义配置
  static getCustomConfig(): CtpServerConfig | null {
    try {
      const stored = localStorage.getItem(this.CONFIG_KEY);
      if (stored) {
        return JSON.parse(stored);
      }
    } catch (error) {
    }
    return null;
  }

  // 保存自定义配置
  static saveCustomConfig(config: CtpServerConfig): void {
    try {
      localStorage.setItem(this.CONFIG_KEY, JSON.stringify(config));
    } catch (error) {
    }
  }

  // 获取所有可用的服务器配置
  static async getAllServers(): Promise<Record<string, CtpServerConfig>> {
    let allServers = { ...CTP_SERVERS };

    // 添加自定义配置
    const customConfig = this.getCustomConfig();
    if (customConfig) {
      allServers.custom = customConfig;
    }

    // 添加账号配置
    try {
      const { AccountConfigManager } = await import('./accountConfig');
      const accountConfigs = await AccountConfigManager.getAccountsAsCtpServers();
      allServers = { ...allServers, ...accountConfigs };
    } catch (error) {
    }

    return allServers;
  }

  // 验证配置是否完整
  static validateConfig(config: CtpServerConfig): string[] {
    const errors: string[] = [];

    if (!config.brokerId?.trim()) {
      errors.push('请输入期货公司代码');
    }

    if (!config.tradeFront?.trim()) {
      errors.push('请输入交易前置地址');
    }

    if (!config.marketFront?.trim()) {
      errors.push('请输入行情前置地址');
    }

    // 验证地址格式
    const frontRegex = /^tcp:\/\/[\d.]+:\d+$/;
    if (config.tradeFront && !frontRegex.test(config.tradeFront)) {
      errors.push('交易前置地址格式不正确，应为: tcp://ip:port');
    }

    if (config.marketFront && !frontRegex.test(config.marketFront)) {
      errors.push('行情前置地址格式不正确，应为: tcp://ip:port');
    }

    return errors;
  }

  // 测试连接配置
  static async testConnection(config: CtpServerConfig): Promise<boolean> {
    // 这里可以实现连接测试逻辑
    // 暂时返回true，实际应该调用CTP API进行连接测试
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve(true);
      }, 1000);
    });
  }
}
